

import java.util.*;
import java.util.stream.Stream;

/**
 * @author feng
 * @Date 2021/12/4 15:55
 * stream映射、排序
 */
public class StreamTest01 {

    @Test
    public void test() {
        List<Employee> list = EmployeeData.getEmployees();
        // map(Function f)  接受一个函数作为参数，将元素转换为其他形式，会被映射到每一个元素上
        List<String> strings = Arrays.asList("aa", "bb", "cc", "dd");
        strings.stream().map(str -> str.toUpperCase()).forEach(System.out::println);
        System.out.println();
        //员工姓名大于三的,map():一种映射关系
        Stream<String> stringStream = list.stream().map(Employee::getName);
        stringStream.filter(name -> name.length() > 3).forEach(System.out::println);
        System.out.println("********************************");
        //  flatmap(Function f):接受一个函数作为参数，将流中的每一个元素转换成另一个流，把所有的流转换成
        //  另一个流
        Stream<Stream<Character>> stream = strings.stream().map(StreamTest01::fromStringToStream);
        stream.forEach(s -> {
            s.forEach(System.out::println);
        });
        System.out.println();
        Stream<Character> stream1 = strings.stream().flatMap(StreamTest01::fromStringToStream);
        stream1.forEach(System.out::println);
    }

    //将字符串中的多个字符构成的集合转换成对应的Stream的实例
    public static Stream<Character> fromStringToStream(String str) {
        ArrayList<Character> list = new ArrayList<>();
        for (Character c : str.toCharArray()) {
            list.add(c);
        }
        return list.stream();
    }

    /**
     * 排序
     */
    @Test
    public void test1() {
        // sorted---自然排序
        List<Integer> list = Arrays.asList(1, 4, 12, 9, 8);
        list.stream().sorted().forEach(System.out::println);

        //指定比较器排序
        List<Employee> list1 = EmployeeData.getEmployees();
        list1.stream().sorted((e1, e2) -> Integer.compare(e1.getAge(), e2.getAge()))
                .forEach(System.out::println);
    }
}
